package cn.imokay.garbageCollection;

/**
 * 引用计数算法   垃圾回收
 * 实现思路:对象中添加一个引用计数器,引用时加一,引用失效减一,为0时就回收
 * 主流的Java虚拟机不会采用该算法,因为大部分情况需要配合大量的额外处理才能保证正常工作
 * 举例:对象循环引用
 */
public class ReferenceCountingGC {
    public Object obj;
    private static final int _1MB = 1024 * 1024;
    /*
    该成员变量的意义是为了占用内存,以便在GC日志中看到是否有回收
     */
    private byte[] bigSize = new byte[2 * _1MB];

    public static void testGC() {
        ReferenceCountingGC obj1 = new ReferenceCountingGC();
        ReferenceCountingGC obj2 = new ReferenceCountingGC();
        obj1.obj = obj2;
        obj2.obj = obj1;
        obj1 = null;
        obj2 = null;
        System.gc();
        //需要查看GC日志,先上结论,obj1,obj2都有被回收,并不会因为没有没引用就不会回收,Java没有用该算法
    }

    public static void main(String[] args) {
        testGC();
    }
}
